package com.duoduo.剑指Offer;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: algorithm
 * @description: 数组中重复的数字07
 * 找出数组中重复的数字。
 *
 *
 * 在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
 *
 * 示例 1：
 *
 * 输入：
 * [2, 3, 1, 0, 2, 5, 3]
 * 输出：2 或 3
 *
 * @author: chaidl  ！
 * @create: 2022-05-22 10:32
 */
public class 数组中重复的数字07 {
	public static void main(String[] args) {
		int[] arr={3, 4, 2, 0, 0, 1};
		findRepeatNumber(arr);
	}
	public static int findRepeatNumber(int[] nums) {
		for (int i = 0; i < nums.length; i++) {
			while (nums[i] != i){
				if (nums[nums[i]]==nums[i]){
					return nums[i];
				}
				int tmp=nums[nums[i]];
				nums[nums[i]]=nums[i];
				nums[i] = tmp;
			}
		}
		return -1;
	}
	public int findRepeatNumber1(int[] nums) {
		Map<Integer,Integer> map=new HashMap<>();
		for (int i = 0; i < nums.length; i++) {
			if (map.containsKey(nums[i])){
				return nums[i];
			}else {
				map.put(nums[i],1);
			}
		}
		return 0;
	}
}
